workflow (DDD)
ビジネスプロセスの一部を詳細に記述したも
DDDと書いているが、『Domain Modeling Made Functional』.iconでしか見たことがないmrsekut.icon
DMMFでは、1つのworkflowは、1つの関数で実装される
workflowはsubstepのチェーンとして表現される
substep毎に状態が更新されることもある
どういう実装になるか?
/mrsekut-book-4048931164/059: 3.3 境界づけられたコンテキスト間の契約
序盤
(別のBounded Contextが飛んできた) Command (ddd)によって起動される
外部からの入力(DTO)を、validateしながらDomain Objectに変換
中盤
Domain Objectを使ってやりたかったことをやるコアロジック
終盤
Bounded Contextから外へ出て、別のContextに繋げるということ
1つ以上のDomain Eventを返す
つまり、処理済みのDomain ObjectをDTO形式でのEventに変換する
privateな情報が漏れ出ていないかを気をつけながらDTOに変換する
実装例 ref
code:ts
export const placeOrderWorkflow = (
command: PlaceOrderDTO,
): Effect.Effect<PlaceOrderResult, ParseError, OrderEventQueue> =>
Effect.gen(function* () {
// 序盤: 検証
const order = yield* fromDTO(command);
// 中盤&終盤: ワークフロー実行とevent生成
const result = yield* placeOrderCore(order);
// イベントをキューに送信
const queue = yield* OrderEventQueue;
yield* Effect.all(result.events.map(e => Queue.offer(queue, e)));
yield* Effect.log(Order placed: ${result.order.orderId});
return result;
});
参考
/mrsekut-book-4048931164/ワークフロー
/mrsekut-book-97816805025/第7章 ワークフローをパイプラインとしてモデル化する
/mrsekut-book-97816805025/044